package com.ynkbny.web.controller;

import com.ynkbny.service.LaoGouApiService;
import com.ynkbny.service.outsideinterface.MyClient;
import com.ynkbny.util.Res;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.List;

/**
 * 老狗Api接口-控制层
 *
 * @author : juzipi123
 * @date : 2023-7-17
 */
@Slf4j
@Api(tags = "老狗Api接口")
@RestController
@RequestMapping("/laoGou")
public class LaoGouApiController {

    @Resource
    private LaoGouApiService service;

    @Resource
    MyClient client;

    /**
     * 登陆
     *
     * @author : juzipi123
     * @param username 用户名
     * @param password 密码
     * @return 结果
     */
    @ApiOperation("登陆")
    @RequestMapping("/login")
    public Res<String> login(String username ,String password){
        log.info("请求参数：{},{}",username,password);
        String url = "https://api.bknykf.com/api/user/login"+"?username="+username+"&password="+password;
        return Res.ok(client.login(url));
    }

    /**
     * 查询所有项目列表，维护“项目表”
     *
     * @author : juzipi123
     * @return 结果
     */
    @ApiOperation("查询所有项目列表，维护“项目表”")
    @GetMapping("/queryProjectList")
    public Res<String> queryProjectList(){
        log.info("请求参数：无");
        String s = service.queryProjectList();
        log.info("返回值：{}",s);
        return Res.ok(s);
    }

    /**
     * 查询所以项目列表，只展示项目的id的一个list
     *
     * @author : juzipi123
     * @return 结果
     */
    @ApiOperation("查询所以项目列表，只展示项目的id的一个list")
    @GetMapping("/queryProjectList2")
    public Res<List<String>> queryProjectList2(){
        log.info("请求参数：无");
        return Res.ok(service.queryProjectList2());
    }

    /**
     *查询所有项目下的区域列表,维护“区域表-region”
     *
     * @author : juzipi123
     * @return 结果
     */
    @ApiOperation("QueryRegionByProject - 查询所有项目下的区域列表,维护“区域表-region”")
    @GetMapping("/queryRegionByProject")
    public Res<String> queryRegionByProject(){
        log.info("请求参数：无");
        return Res.ok(service.queryRegionByProject());
    }

    /**
     * 查询单项目的设备列表
     *
     * @author : juzipi123
     * @param username 用户名
     * @param password 密码
     * @param projId 项目ID
     * @return 结果
     */
    @ApiOperation("查询单项目的设备列表")
    @GetMapping("/queryDeviceByProject")
    public Res<String> queryDeviceByProject(Long projId,String username ,String password){
        log.info("请求参数：{},{},{}",projId,username,password);
        return Res.ok(service.queryDeviceByProject(projId,username,password));
    }

    /**
     * 查询所有项目的设备列表2,维护“设备表-device”
     *
     * @author : juzipi123
     * @return 结果
     */
    @ApiOperation("查询所以项目的设备列表2,维护“设备表-device”")
    @GetMapping("/queryDeviceByProject2")
    public Res<String> queryDeviceByProject2(){
        log.info("请求参数：无");
        return Res.ok(service.queryDeviceByProject2());
    }

    /**
     * 查询单个项目设备的属性快照，维护“设备的属性快照-device_attribute”
     *
     * @author : juzipi123
     * @param projId 项目ID
     * @return 结果
     */
    @ApiOperation("查询单个项目设备的属性快照，维护“设备的属性快照-device_attribute")
    @GetMapping("/QueryProjectDeviceParamStatus")
    public Res<String> QueryProjectDeviceParamStatus(Long projId){
        log.info("请求参数：{}",projId);
        return Res.ok(service.QueryProjectDeviceParamStatus(projId));
    }

    /**
     * 查询所有项目设备的属性快照，维护“设备的属性快照-device_attribute”（登录时间不够，未使用）
     *
     * @author : juzipi123
     * @return 结果
     */
    @ApiOperation("查询所有项目设备的属性快照，维护“设备的属性快照-device_attribute”")
    @GetMapping("/QueryProjectDeviceParamStatus2")
    public Res<String> QueryProjectDeviceParamStatus2(){
        log.info("请求参数：无");
        String param = service.QueryProjectDeviceParamStatus2();
        log.info("返回值：{}",param);
        return Res.ok(param);
    }

    /**
     * 根据项目ID，批量查询属性的历史数据 -存入mongdb-deviceHistoryData表
     *
     * @author : juzipi123
     * @param username 用户名
     * @param password 密码
     * @param projId 项目id
     * @param start 开始时间（时间戳）
     * @param end 结束时间（时间戳）
     * @param metric 多个属性flag(可选,不填查询设备下所有参数)
     * @return 结果
     */
    @ApiOperation("根据项目ID，批量查询属性的历史数据")
    @GetMapping("/queryDeviceParamHistoryDataByProjId")
    public Res<String> queryDeviceParamHistoryDataByProjId(String username, String password,Long projId,Long start,Long end,String metric ){
        log.info("请求参数：{},{},{},{},{},{}",username,password,projId,start,end,metric);
        return Res.ok(service.queryDeviceParamHistoryDataByProjId(username,password, projId,start,end,metric));
    }

    /**
     * 根据设备ID，查询属性的历史数据 -存入mongdb-deviceHistoryData表
     *
     * @author : juzipi123
     * @param username 用户名
     * @param password 密码
     * @param deviceId 设备id
     * @param start 开始时间（时间戳）
     * @param end 结束时间（时间戳）
     * @param metric 多个属性flag(可选,不填查询设备下所有参数)
     * @return 结果
     */
    @ApiOperation("根据设备ID，查询属性的历史数据")
    @GetMapping("/queryDeviceParamHistoryDataBydeviceId")
    public Res<String> queryDeviceParamHistoryDataBydeviceId(String username, String password,String deviceId,String start,String end,String metric ){
        log.info("请求参数：{},{},{},{},{},{}",username,password,deviceId,start,end,metric);
        return Res.ok(service.queryDeviceParamHistoryDataBydeviceId(username,password, deviceId,start,end,metric));
    }

    /**
     * 根据设备ID，查询属性的历史数据 -取出相关数据（存入表plan_data）
     *
     * @author : juzipi123
     * @param deviceId 设备id
     * @param start 开始时间（时间戳）
     * @param end 结束时间（时间戳）
     * @param metric 多个属性flag(可选,不填查询设备下所有参数)
     * @return 结果
     */
    @ApiOperation("根据设备ID，查询属性的历史数据")
    @GetMapping("/savePlanData")
    public Res<String> savePlanData(String projId,String deviceId,String start,String end,String metric ){
        log.info("请求参数：{},{},{},{},{},{}",projId,deviceId,start,end,metric);
        return Res.ok(service.savePlanData(projId, deviceId,start,end,metric));
    }

    /**
     * 批量新增数据 PlanData
     *
     * @author : juzipi123
     * @return 是否成功
     */
    @ApiOperation("批量新增数据")
    @GetMapping("/savePlanDatas")
    public Res<String> savePlanDatas() {
        log.info("请求参数：无");
        return service.savePlanDatas() ? Res.ok() : Res.fail();
    }
}
